package com.common.library.net;

import android.util.Log;

import com.common.library.tools.JSONTools;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.yolanda.nohttp.error.NetworkError;
import com.yolanda.nohttp.error.TimeoutError;
import com.yolanda.nohttp.rest.OnResponseListener;
import com.yolanda.nohttp.rest.Response;


/**
 * @title 请求结果回调
 * <p>
 * 包含数据解密，非空判断，网络异常等
 * <p>
 * 1.当数据可用时回调 onSuccess，结果为data字段数据
 * 2.失败回调 onError，以下错误码分别代表不同异常
 * <p>
 * 0.客户端请求异常，请求超时，无网络等异常，具体错误看message提示。
 * -1.服务器返回异常（通常为数据格式有误，解析失败。）
 * -2.无内容
 * -x.服务器返回错误码，具体错误看message提示。
 */
public class HttpStringListener implements OnResponseListener<String> {
    private String TAG = getClass().getName();
    /**
     * 当请求开始时
     * @param what 多个请求时。该字段用于区别
     */
    @Override
    public void onStart(int what) {

    }
    /**
     * 服务器有正确响应时（请求成功）
     *
     * @param what     多个请求时。该字段用于区别
     * @param response successful callback.
     */
    @Deprecated
    @Override
    public void onSucceed(int what, Response<String> response) {
        Log.i(TAG, "--->UN 请求结果数据:");
        Log.i(TAG, response.get().toString());
        String strDecode = response.get().toString();
        HttpResponse result = JSONTools.fromJson(strDecode, HttpResponse.class);
        //无效数据过滤掉。
        if (result == null) {
            onError(what, HttpException.NONE_RESULT.getCode(), HttpException.NONE_RESULT.getMessage());
            return;
        }
        //服务器返回的错误信息在2000以后
        int error = Integer.parseInt(result.getErrCode());
        if (error != 0) {
            onError(what, error, result.getMsg());
            return;
        }
        onSuccess(what, new JsonParser().parse(strDecode), result.getMsg());
    }
    /**
     * 错误响应时
     *
     * @param what     多个请求时。该字段用于区别
     * @param response failure callback.
     */
    @Deprecated
    @Override
    public void onFailed(int what, Response<String> response) {
        response.getException().printStackTrace();
        if (response.getException() instanceof TimeoutError) {
            onError(what, HttpException.DEFAULT.getCode(), "请求超时");
        } else if (response.getException() instanceof NetworkError) {
            onError(what, HttpException.DEFAULT.getCode(), "网络异常");
        } else {
            onError(what, HttpException.DEFAULT.getCode(), HttpException.NONE_RESULT.getMessage());
        }
    }
    public void onSuccess(int what, JsonElement data, String message) {
    }
    public void onError(int what, int error, String message) {
    }
    /**
     * 当请求结束时
     * @param what 多个请求时。该字段用于区别
     */
    @Override
    public void onFinish(int what) {

    }
}
